/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.Bl;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.Enumeraciones.EstadoTransaccion;
import mx.its.dsw2.biblioteca.Modelo.Categoria;
import mx.its.dsw2.biblioteca.Modelo.CategoriaDeLibro;
import mx.its.dsw2.biblioteca.Modelo.Libro;
import mx.its.dsw2.bibliotecaDao.CategoriaDeLibroDaoLocal;
import mx.its.dsw2.bibliotecaDao.LibroDaoLocal;

/**
 *
 * @author Yessy
 */
@Stateless
public class LibroBl implements LibroBlLocal {

    @EJB
    private CategoriaDeLibroDaoLocal categoriaDeLibroDao;
    @EJB
    private LibroDaoLocal libroDao;

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    @Override
    public EstadoTransaccion register(Libro book, List<Categoria> categories) {
        if (libroDao.findDuplicity(book)) {
            return EstadoTransaccion.INCOMPLETO;
        } else {
            libroDao.create(book);
            for (Categoria c : categories) {
                CategoriaDeLibro cdl = new CategoriaDeLibro();
                cdl.setIdCategoria(c);
                cdl.setIdLibro(book);
                categoriaDeLibroDao.create(cdl);
            }

            return EstadoTransaccion.COMPLETO;

        }

    }

    //meterlo a una categoria
    @Override
    public EstadoTransaccion modify(Libro book, List<Categoria> lista) {
//        if (book.getId() == null || libroDao.find(book.getId()) == null) {
//            return EstadoTransaccion.INCOMPLETO;
//        } else {
        libroDao.edit(book);
        List<CategoriaDeLibro> old = book.getCategoriaDeLibroList();
        for (CategoriaDeLibro c : old) {
            categoriaDeLibroDao.remove(c);
        }
        for (Categoria c : lista) {
            CategoriaDeLibro cdl = new CategoriaDeLibro();
            cdl.setIdCategoria(c);
            cdl.setIdLibro(book);
            categoriaDeLibroDao.create(cdl);
        }
        return EstadoTransaccion.COMPLETO;
        // }
    }

    @Override
    public EstadoTransaccion delete(Libro book) {
        if (book.getId() == null || libroDao.find(book.getId()) == null) {
            return EstadoTransaccion.INCOMPLETO;
        } else {
            libroDao.remove(book);
            return EstadoTransaccion.COMPLETO;

        }
    }

    @Override
    public List getAll() {
        return libroDao.findAll();
    }

    @Override
    public Libro findBookForLend(String codigoDeLibro) {
        return libroDao.findBookForLend(codigoDeLibro);
    }
}
